/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package DAO;

import BD.MySql;
import Clases.Categoria;
import Clases.Responsable;
import Clases.Tarea;
import java.text.SimpleDateFormat;
import java.util.List;

/**
 *
 * @author angelo
 */
public class DAOTarea {

    public static boolean modificarTarea(Tarea tarea) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
        String date = sdf.format(tarea.getVencimiento());
        String sql = "UPDATE Tarea SET Titulo=?,Texto=?,Prioridad=?,Vencimiento=?,Completado=?,Id_Categoria=? WHERE Id_Tarea=? ";
        Object[] parametros = {tarea.getTitulo(), tarea.getTexto(), tarea.getPrioridad(), date, tarea.getCompletado(), tarea.getId_Categoria(), tarea.getId_Tarea()};
        MySql mySql = new MySql();
        if (mySql.executeUpdate(sql, parametros) == 0) {
            return false;
        } else {
            return true;
        }

    }

    public static boolean cargarTarea(Tarea tarea) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
        String date = sdf.format(tarea.getVencimiento());
        String sql = "INSERT INTO Tarea(Titulo, Texto, Prioridad, Vencimiento,Completado,Id_Responsable,Id_Categoria) VALUES (?,?,?,?,?,?,?)";
        Object[] parametros = {tarea.getTitulo(), tarea.getTexto(), tarea.getPrioridad(), date, tarea.getCompletado(), tarea.getId_Responsable(), tarea.getId_Categoria()};
        MySql mySql = new MySql();
        if (mySql.executeUpdate(sql, parametros) == 0) {
            return false;
        } else {
            return true;
        }

    }

    public static boolean eliminarTarea(String idTarea) {
        String sql = "DELETE FROM Tarea WHERE Id_Tarea = ?";
        Object[] parametros = {idTarea};
        MySql mySql = new MySql();
        if (mySql.executeUpdate(sql, parametros) == 0) {
            return false;
        } else {
            return true;
        }
    }

    public static boolean reasignarResponsableTarea(Responsable responsable, Tarea tarea) {
        String sql = "UPDATE Tarea SET Id_Responsable = ? WHERE Id_Tarea = ?";
        Object[] parametros = {responsable.getId_Responsable(), tarea.getId_Tarea()};
        MySql mySql = new MySql();
        if (mySql.executeUpdate(sql, parametros) == 0) {
            return false;
        } else {
            return true;
        }
    }

    public static boolean cambiarEstadoTarea(Tarea tarea) {
        String sql = "UPDATE Tarea SET Completado = ? WHERE Id_Tarea = ?";
        Object[] parametros = {tarea.getCompletado(), tarea.getId_Tarea()};
        MySql mySql = new MySql();
        if (mySql.executeUpdate(sql, parametros) == 0) {
            return false;
        } else {
            return true;
        }
    }

    public static List<Tarea> getTarea() {
        String sql = "SELECT * FROM Tarea ";
        MySql<Tarea> mySql = new MySql<Tarea>();
        List<Tarea> lista = mySql.executeQuery(sql, Tarea.class, null);
        return lista;
    }

    public static List<Tarea> getTarea2() {
        String sql = "SELECT * FROM Tarea where Completado < 100 order by Id_Responsable, Vencimiento DESC";
        MySql<Tarea> mySql = new MySql<Tarea>();
        List<Tarea> lista = mySql.executeQuery(sql, Tarea.class, null);
        return lista;
    }

    public static boolean existenRelaciones(Categoria cat) {
//          En la facu, la version del derby no acepta fetch      
        String sql = "select * from Tarea where Id_Categoria = ? FETCH FIRST 1 ROWS ONLY";
        //String sql = "select * from Tarea where Id_Categoria = ?";
        Object[] parametros = {cat.getId_Categoria()};
        MySql<Tarea> mySql = new MySql<Tarea>();
        List<Tarea> lista = mySql.executeQuery(sql, Tarea.class, parametros);
        if (lista.isEmpty()) {
            return false;
        } else {
            return true;
        }
    }

    public static boolean existenRelaciones(Responsable res) {
//          En la facu, la version del derby no acepta fetch      
        String sql = "select * from Tarea where Id_Responsable = ? FETCH FIRST 1 ROWS ONLY";
        //String sql = "select * from Tarea where Id_Responsable = ?";
        Object[] parametros = {res.getId_Responsable()};
        MySql<Tarea> mySql = new MySql<Tarea>();
        List<Tarea> lista = mySql.executeQuery(sql, Tarea.class, parametros);
        if (lista.isEmpty()) {
            return false;
        } else {
            return true;
        }
    }

    public static Tarea getUltimaTarea(Tarea res) {
//          En la facu, la version del derby no acepta fetch        
        String sql = "select * from Tarea where Id_Responsable = ? AND Completado < 100 order by "
                + "Vencimiento DESC FETCH FIRST 1 ROWS ONLY";
//        String sql = "select * from Tarea where Id_Responsable = ? AND Completado < 100 order by "
//                + "Vencimiento DESC";
        Object[] parametros = {res.getId_Responsable()};
        MySql<Tarea> mySql = new MySql<Tarea>();
        List<Tarea> lista = mySql.executeQuery(sql, Tarea.class, parametros);
        if (lista.isEmpty()) {
            return null;
        } else {
            return lista.get(0);
        }
    }

    public static boolean modificarCategoriaTarea(Tarea tarea) {
        String sql = "UPDATE Tarea SET Id_Categoria = ? WHERE Id_Tarea = ?";
        Object[] parametros = {tarea.getId_Categoria(), tarea.getId_Tarea()};
        MySql mySql = new MySql();
        if (mySql.executeUpdate(sql, parametros) == 0) {
            return false;
        } else {
            return true;
        }
    }

    public static boolean modificarEstadoTarea(Tarea tarea) {
        String sql = "UPDATE Tarea SET Completado = ? WHERE Id_Tarea = ?";
        Object[] parametros = {tarea.getCompletado(), tarea.getId_Tarea()};
        MySql mySql = new MySql();
        if (mySql.executeUpdate(sql, parametros) == 0) {
            return false;
        } else {
            return true;
        }
    }
}
